import Axios from 'axios'
import router from '../router'
import { LocalStorage, Notify } from 'quasar'

// 创建axios实例
const _ajax = Axios.create();
//_ajax.defaults.timeout = 5000;
//_ajax.defaults.baseURL = 'http://localhost:8090';
_ajax.defaults.baseURL = '/api';

const _getAccount = () => {
  let account = LocalStorage.get.item('account');
  return account ? account : false;
  /*
  return {
    "id": "101",
    "token": "STS 101;ADMIN"
  };*/
}

/** 
 * 请求拦截器 
 * 每次请求前，如果存在token则在请求头中携带token 
 */ 
_ajax.interceptors.request.use(    
  config => {
    // token       
    const account = _getAccount();    
    if(account) {
      config.headers["Authorization"] = account.token;
      config.headers["X-Account"] = account.id;
    }      
    return config;    
  },    
  error => Promise.error(error)
);

// 响应拦截器
_ajax.interceptors.response.use(    
  response => {        
    if (response.status === 200) {            
        return Promise.resolve(response);        
    } else {            
        return Promise.reject(response);        
    }    
  },  
  error => {        
    if (error.response.status != 200) {            
      switch (error.response.status) {                
        // TODO               
        // 未登录则跳转登录页面，并携带当前页面的路径                
        // 在登录成功后返回当前页面，这一步需要在登录页操作。                  
        case 403:
          Notify.create({
            message: '没有权限访问数据',
            type: 'negative'
          })  
        // break; 调整到401的登录              
        case 401:  
          router.replace({
            path: '/login',
            query: {redirect: router.currentRoute.fullPath}
          });
        break;              
        case 404:                    
          Notify.create({
            message: '请求参数错误',
            type: 'negative'
          })                  
        break;   
        case 413:                    
          Notify.create({
            message: '上传文件过大! 请确保上传文件大小在5M以内。',
            type: 'negative'
          })                  
        break;              
        // 其他错误，直接抛出错误提示                
        default:                    
          Notify.create({                        
            message: error.response.data.msg?error.response.data.msg:'发生异常',
            type: 'negative'                 
          });           
      }
      console.log(error.response.data);
      return Promise.reject(error.response);        
    }       
  }
);

export default _ajax;
